#include <RSLib/Common.hpp>
#ifndef RSLIB___MATH_HPP
#define RSLIB___MATH_HPP
 
 
 
//---INCLUDE
//----------------------->
#include <RSLib/Types.hpp>
#include <math.h>
#include <float.h>
 
 
 
//---NAMESPACE
//--------------->
namespace RSLib {
namespace Math {
 
 
 
//---MATH FUNCTION
//------------------------------------------------------------------------------------------------->
template<typename T> inline T Abs(const T& f)													{return abs(f);}
template<typename T> inline T Floor(const T& f)													{return floor(f);}
template<typename T> inline T Ceil(const T& f)													{return ceil(f);}
template<typename T> inline T Round(const T& f)													{return floor(f + T(0.5) );}
template<typename T> inline T Mod(const T& f,const T& q)										{return fmod(f,q);}
template<typename T> inline T SquareRoot(const T& f)											{return sqrt(f);}
template<typename T> inline T ReciprocalSquareRoot(const T& a)								{return T(1.0)/SquareRoot(a);}
template<typename T> inline T LogE(const T& value)												{return log(value);}
template<typename T> inline T Log(const T& value,const T& base)							{return log(value)/log(base);}
template<typename T> inline T Log2(const T& value)												{return log(value,2);}
template<typename T> inline T Log10(const T& value)											{return log10(value);}
template<typename T> inline T Exp(const T& value)												{return exp(value);}
 
 
 
//---TRIGONOMETRIC FUNCTIONS
//------------------------------------------------------------------------------->
template <typename T> inline T Cos(const T& radians)			{return cos(radians);}
template <typename T> inline T Sin(const T& radians)			{return sin(radians);}
template <typename T> inline T Tan(const T& radians)			{return tan(radians);}
template <typename T> inline T Acos(const T& radians)			{return acos(radians);}
template <typename T> inline T Asin(const T& radians)			{return asin(radians);}
template <typename T> inline T Atan(const T& radians)			{return atan(radians);}
template <typename T> inline T Atan(const T& x, const T& y)	{return atan2(x,y);}
 
 
 
}//namespace Math
}//namespace RSLib
 
 
 
#endif//RSLIB___MATH_HPP
